'''
1)类的方法，可以调用类的其他方法，也可以调用当前方法，但是会造成死循环
2）普通的方法，必须通过对象名去调用，如果想要不创建对象，直接使用类名调用方法，可以将这个方法定义为类方法或者静态方法
   普通方法的第一个参数必须是self,调用时并不需要传参
3）类方法：在方法上定义一个装饰器 @classmethod
  静态方法：在方法上定义一个装饰器 @staticmethod
4)方法方式：类名.类方法
           对象名.类方法
5）类方法和静态方法区别
   --》定义上代码格式不同
   --》类方法第一个参数必须是cls
   --》类方法中可以访问属性
'''

class Human:
    name1 = "人类"

    @classmethod
    def aaa(cls):# 第一个参数形参必须为cls，可以添加其他参数
        # cls是一个对象 系统自己创建一个类对象，可以通过该对象获取属性
        print("-----类方法------")
        print(cls.name1) # 类方法中可以通过cls去访问类属性
        # cls.putong(cls)

    @classmethod
    def ccc(cls,name):# 第一个参数形参必须为cls，可以添加其他参数
        print("-----类方法------",name)

    @staticmethod
    def bbb():
        print("-----静态方法------")

    @staticmethod
    def ddd(name):
        print("-----静态方法------",name)

    def putong(self):
        print("----普通方法----")

# 类名访问
Human.aaa()
Human.bbb()
Human.ccc("她她她")
Human.ddd("wowowo")

# 对象名访问
h = Human()
h.aaa()
h.bbb()